// 从零开始做权限控制
import router from '@/router'
import store from '@/store'
// 引入progress 插件
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式
// start()开始时候的进度条 done()结束进度条

// 路由全局前置导航守卫
// to: 目标路由对象
// from： 来源路由对象 从哪里来
// next：放行方法
const whiteList = ['/login', '/404'] // 定义白名单  所有不受权
router.beforeEach(async(to, from, next) => {
  // 如果有token，在登录页 就跳转到首页去
  // 有token不去登录页 直接放行
  // 开始跳转
  NProgress.start()
  const token = store.getters.token
  // 有token
  if (token) {
    // 在登录页 ，跳到主页
    if (to.path === '/login') {
      next('/')
    } else {
      // 不在登录页 直接放行
      // 这里保证是有token的  所以在中间要调用action获取权限数据    往后要进行放行去首页
      // 在这里调用action函数
      // 之后把它存到vuex里面 有就不请求数据 没有在请求,通过userId
      if (!store.state.user.userInfo.userId) {
        await store.dispatch('user/asyncGetUserInfo')
      }
      // 不管在哪个分支  结束的时候next()方法都要执行到
      next()
    }
  } else {
    //   没有token
    if (whiteList.includes(to.path)) {
      // 在白名单  直接放行
      next()
    } else {
      //   不在白名单 跳到登录页强制
      next('/login')
    }
  }
  // 结束跳转
  NProgress.done()
})
